package com.dongdongshop.aop;

import com.alibaba.fastjson.JSONObject;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

//这个是切面类
@Component//将切面类放到容器中
@Aspect//将当前类定义为切面类
public class LogAspect {
    private Logger logger = LoggerFactory.getLogger(LogAspect.class);

    //定义切点表达式
    @Pointcut("execution(* com.dongdongshop.service.*.*(..))")//定义切点表达式
    //所有类 所有方法名 所有的参数 所有的公共返回值
    public void aopLog(){}

    //前置通知 ：被拦截方法前调用
    @Before("aopLog()")
    public void doBefore(JoinPoint joinPoint)throws Throwable{
        Object[] args = joinPoint.getArgs();
        Signature signature = joinPoint.getSignature();
        logger.info("进入 {} 方法,参数为 {}",signature,args);
    }
    //后置通知 ：被拦截的方法后调用
    @AfterReturning(value = "aopLog()",returning = "obj")
    private void doAfter(Object obj){
        logger.info("方法调佣成功,方法的返回值为 : {}", JSONObject.toJSONString(obj));
    }

}
